<?php

/**
 * Pre-validator pentru formularul de completare a blocurilor si scarilor componente (EmptyBlocListForm)
 */
class EmptyBlocListPreValidator extends sfValidatorSchema
{

    public function configure($options = array(), $messages = array())
    {

    }

    /**
     * Elimina scarile duplicate
     * Denumirile blocurilor si a scarilor vor contine doar litere mari
     *
     * @param array $values
     * @return type
     */
    protected function doClean($values)
    {
        // extrag valorile corespunzatoare subform-ului 'list'
        $formValues = $values[EmptyBlocListForm::WRAPPER_NAME];

        if ($formValues === null)
        {
            return $values;
        }

        // parcurg subform-urile din 'list'
        foreach ($formValues as $key => $value)
        {
            // denumirea blocului va contine doar litere mari
            $formValues[$key]['name'] = trim(strtoupper($value['name']));

            // elimin eventualele scari duplicate
            // construiesc un array de forma {key=indexul scarii, value=denumirea scarii}
            $filteredScara = array();
            foreach ($formValues[$key][EmptyBlocForm::WRAPPER_NAME] as $scaraKey => $scaraValue)
            {
                $formValues[$key][EmptyBlocForm::WRAPPER_NAME][$scaraKey]['name'] = $filteredScara[$scaraKey] = trim(strtoupper($scaraValue['name']));
            }
            foreach (myTools::find_duplicates($filteredScara) as $scaraKey => $scaraName)
            {
                unset($formValues[$key][EmptyBlocForm::WRAPPER_NAME][$scaraKey]);
            }
        }

        $values[EmptyBlocListForm::WRAPPER_NAME] = $formValues;

        return $values;
    }

}
